package com.example.sxt_practise.java基础;

import java.util.Arrays;

/**
 * @author gaofeng
 * date 2022年04月10日 10:06
 */
public class Apply {

    /**
     * 根据传递的参数对象的不同而具有不同的行为
     * 这类方法包含所要执行的算法中固定不变的部分,而策略包含变化的部分
     * 策略就是传递进去的参数对象,它包含要执行的代码
     * @param processor
     * @param obj
     * @return
     */
    public static void process(Processor processor, Object obj) {
        System.out.println("user processor: " + processor.name());
        System.out.println(processor.process(obj));
    }

    public static String s = "sajdfasldkj  jasleidfjaskdng fjasdloifjweijnfaldfn" ;

    public static void main(String[] args) {
        process(new Upcase(), s);
        process(new Downcase(), s);
        process(new Splitter(), s);
    }
}

class Processor {
    public String name() {
        return getClass().getSimpleName() ;
    }
    Object process(Object obj) {
        return obj ;
    }
}

class Upcase extends Processor {
    @Override
    String process(Object input) {
        return input.toString().toUpperCase() ;
    }
}

class Downcase extends Processor {
    @Override
    String process(Object input) {
        return input.toString().toLowerCase() ;
    }
}

class Splitter extends Processor {
    @Override
    String process(Object input) {
        return Arrays.toString(input.toString().split(",")) ;
    }
}
